package DAOs;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import Entidades.EntidadeVendedor;
import Entidades.EnumCategoria;
import Excecoes.ExececaoCategoriaVendedorIncorreta;
import Utils.UtilCaminhoArquivosTexto;
import Utils.UtilLeitorDeArquivos;

public class DAOVendedor implements DAOItem{
	private List<String[]> dadosFiltadros;
	private static Map<String,EntidadeVendedor> vendedores = new HashMap<String,EntidadeVendedor>();

	public void recupera(String caminhoArquivoTexto) throws IOException, ExececaoCategoriaVendedorIncorreta{
		dadosFiltadros = new ArrayList<String[]>();
		dadosFiltadros = UtilLeitorDeArquivos.configuraDadosDoArquivo(caminhoArquivoTexto);
		criaVendedores(dadosFiltadros);
	}
	
	public void atualiza(String caminhoArquivoTexto) throws IOException, ExececaoCategoriaVendedorIncorreta{
		recupera(caminhoArquivoTexto);
		UtilLeitorDeArquivos.atualizaBD(dadosFiltadros, UtilCaminhoArquivosTexto.txtVendedoresBD);
	}
	
	private EnumCategoria defineCategoria(String str) throws ExececaoCategoriaVendedorIncorreta{
		EnumCategoria categoria = null;
		switch(str){
			case "1":
				categoria = EnumCategoria.CATEGORIA1;
			break;
			case "2":
				categoria = EnumCategoria.CATEGORIA2;
			break;
			default:
				throw new ExececaoCategoriaVendedorIncorreta("teste");
		}
		return categoria;
	}
	
	private void criaVendedores(List<String[]> dadosFiltadros) throws ExececaoCategoriaVendedorIncorreta{
		for(String[] strs : dadosFiltadros){
			EnumCategoria categoria = defineCategoria(strs[2]);
			EntidadeVendedor vendedor = new EntidadeVendedor(strs[0], strs[1], categoria, null);
			if(!vendedores.containsKey(vendedor.getCodigo())){
				vendedores.put(vendedor.getCodigo(), vendedor);
			}else{
				EntidadeVendedor atualizaVendedor = vendedores.get(vendedor.getCodigo());
				atualizaVendedor.setNome(vendedor.getNome());
				atualizaVendedor.setCategoria(vendedor.getCategoria());
			}
        }
	}

	public static Map<String, EntidadeVendedor> getVendedores() {
		return vendedores;
	}

	public static void setVendedores(Map<String, EntidadeVendedor> vendedores) {
		DAOVendedor.vendedores = vendedores;
	}
}
